package com.baiyang.server.runner;

import java.lang.reflect.Method;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import com.baiyang.server.dao.CreateTable;

/**
 * @author XVX 
 *  初始化数据库表的操作
 *  在spring boot容器初始化完成后执行
 *  需要实现{@code ApplicationRunner}，并需要重写run方法
 */
@Component
@Order(1)
public class InitDB implements ApplicationRunner{

	@Autowired
	private CreateTable createTable = null;
	
	private static Logger logger = LoggerFactory.getLogger(InitDB.class);
	/**
	 * 通过反射的思路获取{@code CreateTable}中声明的接口，并以此调用
	 */
	@Override
	public void run(ApplicationArguments args) throws Exception {
		Method[] methods = CreateTable.class.getDeclaredMethods();
		logger.info("*****************数据库初始化开始***********************");
		for (Method method : methods) {
			//通过反射执行所有方法
			method.invoke(createTable);
		}
		logger.info("*****************数据库初始化完成***********************");
	}

}
